// vite.config.js
import path2 from "path";
import os from "os";
import { defineConfig, loadEnv } from "file:///E:/hubei-project/virtual-tour-web/node_modules/vite/dist/node/index.js";

// build/plugins/index.js
import vue from "file:///E:/hubei-project/virtual-tour-web/node_modules/@vitejs/plugin-vue/dist/index.mjs";
import unocss from "file:///E:/hubei-project/virtual-tour-web/node_modules/unocss/dist/vite.mjs";
import viteEslint from "file:///E:/hubei-project/virtual-tour-web/node_modules/vite-plugin-eslint/dist/index.mjs";
import Inspector from "file:///E:/hubei-project/virtual-tour-web/node_modules/vite-plugin-vue-inspector/dist/index.mjs";
import { visualizer } from "file:///E:/hubei-project/virtual-tour-web/node_modules/rollup-plugin-visualizer/dist/plugin/index.js";
import vueJsx from "file:///E:/hubei-project/virtual-tour-web/node_modules/@vitejs/plugin-vue-jsx/dist/index.mjs";

// build/plugins/unplugin.js
import path from "path";
import AutoImport from "file:///E:/hubei-project/virtual-tour-web/node_modules/unplugin-auto-import/dist/vite.js";
import Components from "file:///E:/hubei-project/virtual-tour-web/node_modules/unplugin-vue-components/dist/vite.mjs";
import { ElementPlusResolver } from "file:///E:/hubei-project/virtual-tour-web/node_modules/unplugin-vue-components/dist/resolvers.mjs";
import IconsResolver from "file:///E:/hubei-project/virtual-tour-web/node_modules/unplugin-icons/dist/resolver.mjs";
import Icons from "file:///E:/hubei-project/virtual-tour-web/node_modules/unplugin-icons/dist/vite.mjs";
import { createSvgIconsPlugin } from "file:///E:/hubei-project/virtual-tour-web/node_modules/vite-plugin-svg-icons/dist/index.mjs";
function unplugin() {
  return [
    // https://github.com/antfu/unplugin-auto-import
    AutoImport({
      // 自动导入vue和vue-router中的composition api
      // 具体api可以在.eslintrc-auto-import.json查看
      imports: ["vue", "vue-router"],
      vueTemplate: true,
      eslintrc: {
        // true--每次都会生成eslintrc-auto-import
        enabled: true,
        filepath: "./.eslintrc-auto-import.json",
        globalsPropValue: true
      },
      // 不需要生成.d.ts文件
      dts: true,
      // 自定义的解析器
      resolvers: [
        ElementPlusResolver(),
        IconsResolver({
          prefix: "Icon"
        })
      ]
    }),
    // https://github.com/antfu/unplugin-vue-components
    // @components目录下的.vue,.js文件会被自动导入
    Components({
      deep: false,
      // 不需要生成.d.ts文件
      dts: true,
      // 注册组件的相对目录
      dirs: ["src/components/*"],
      // 组件的扩展名
      extensions: ["vue", "js"],
      // 允许后面导入的同名组件覆盖前面的
      // 目前只有demo.vue同名了(这个只用作预览,不用做实际业务)
      allowOverrides: true,
      resolvers: [
        ElementPlusResolver(),
        // 自动导入必须遵循名称格式 {prefix：默认为i}-{collection：图标集合的名称,element plus 为ep}-{icon：图标名称}
        IconsResolver({
          enabledCollections: ["ep"]
        })
      ]
    }),
    Icons({
      autoInstall: true
    }),
    // svg雪碧图插件,减少http请求
    createSvgIconsPlugin({
      iconDirs: [path.resolve(process.cwd(), "src/assets/svg-icons")]
    })
  ];
}

// build/plugins/singlefile.js
var defaultConfig = { useRecommendedBuildConfig: true, removeViteModuleLoader: false, deleteInlinedFiles: true };
function replaceScript(html, scriptFilename, scriptCode, removeViteModuleLoader = false) {
  const reScript = new RegExp(`<script([^>]*?) src="[./]*${scriptFilename}"([^>]*)></script>`);
  const preloadMarker = /"__VITE_PRELOAD__"/g;
  const newCode = scriptCode.replace(preloadMarker, "void 0");
  const inlined = html.replace(
    reScript,
    (_, beforeSrc, afterSrc) => `<script${beforeSrc}${afterSrc}>${newCode}</script>`
  );
  return removeViteModuleLoader ? _removeViteModuleLoader(inlined) : inlined;
}
var isJsFile = /\.[mc]?js$/;
var isCssFile = /\.css$/;
var isHtmlFile = /\.html?$/;
function viteSingleFile({
  useRecommendedBuildConfig = true,
  removeViteModuleLoader = false,
  inlinePattern = [],
  deleteInlinedFiles = true
} = defaultConfig) {
  function warnNotInlined(filename) {
    console.debug(`NOTE: asset not inlined: ${filename}`);
  }
  return {
    name: "vite:singlefile",
    config: useRecommendedBuildConfig ? _useRecommendedBuildConfig : void 0,
    enforce: "post",
    generateBundle: (_, bundle) => {
      console.debug("\n");
      const files = {
        html: [],
        css: [],
        js: [],
        other: []
      };
      for (const i of Object.keys(bundle)) {
        if (isHtmlFile.test(i)) {
          files.html.push(i);
        } else if (isCssFile.test(i)) {
          files.css.push(i);
        } else if (isJsFile.test(i)) {
          files.js.push(i);
        } else {
          files.other.push(i);
        }
      }
      const bundlesToDelete = [];
      for (const name of files.html) {
        const htmlChunk = bundle[name];
        let replacedHtml = htmlChunk.source;
        for (const filename of files.js) {
          const jsChunk = bundle[filename];
          if (jsChunk.code != null) {
            console.debug(`Inlining: ${filename}`);
            bundlesToDelete.push(filename);
            replacedHtml = replaceScript(replacedHtml, jsChunk.fileName, jsChunk.code, removeViteModuleLoader);
          }
        }
        htmlChunk.source = replacedHtml;
      }
      if (deleteInlinedFiles) {
        for (const name of bundlesToDelete) {
          delete bundle[name];
        }
      }
      for (const name of files.other) {
        warnNotInlined(name);
      }
    }
  };
}
var _removeViteModuleLoader = (html) => html.replace(
  /(<script type="module" crossorigin>\s*)\(function(?: polyfill)?\(\)\s*\{[\s\S]*?\}\)\(\);/,
  '<script type="module">'
);
var _useRecommendedBuildConfig = (config) => {
  if (!config.build)
    config.build = {};
  config.build.assetsInlineLimit = () => true;
  config.build.chunkSizeWarningLimit = 1e8;
  config.build.cssCodeSplit = false;
  config.base = "./";
  config.build.assetsDir = "";
  if (!config.build.rollupOptions)
    config.build.rollupOptions = {};
  if (!config.build.rollupOptions.output)
    config.build.rollupOptions.output = {};
  const updateOutputOptions = (out) => {
    out.inlineDynamicImports = true;
    out.assetFileNames = "assets/[name]-[hash][extname]";
  };
  if (Array.isArray(config.build.rollupOptions.output)) {
    for (const o of config.build.rollupOptions.output)
      updateOutputOptions(o);
  } else {
    updateOutputOptions(config.build.rollupOptions.output);
  }
};

// build/plugins/html.js
import { createHtmlPlugin } from "file:///E:/hubei-project/virtual-tour-web/node_modules/vite-plugin-html/dist/index.mjs";
function html_default() {
  return createHtmlPlugin({
    minify: true
  });
}

// build/plugins/index.js
var setupVitePlugins = (viteEnv) => {
  console.log(viteEnv);
  const isProd = process.env.NODE_ENV;
  if (isProd) {
    const plugins = [vue(), vueJsx(), unocss(), ...unplugin(), html_default()];
    if (viteEnv.mode === "proto") {
      plugins.push(viteSingleFile());
    }
    return plugins;
  }
  return [
    vue(),
    vueJsx(),
    unocss(),
    // 开发环境的eslint检查插件
    viteEslint({
      failOnWarning: true
    }),
    ...unplugin(),
    // 打包分析插件
    visualizer({
      open: false,
      gzipSize: true,
      brotliSize: true,
      emitFile: false,
      filename: "test.html"
      //分析图生成的文件名
    }),
    /**
     * 从页面跳入IDE内对应的组件
     * 不会识别到组件,除非有一个根组件
     * https://github.com/webfansplz/vite-plugin-vue-inspector/issues/49
     */
    Inspector({
      toggleButtonVisibility: "never"
    }),
    html_default()
  ];
};

// vite.config.js
var __vite_injected_original_dirname = "E:\\hubei-project\\virtual-tour-web";
var vite_config_default = defineConfig((configEnv) => {
  console.log("configEnv.mode", configEnv.mode);
  console.log("process.cwd()", process.cwd());
  console.log("loadEnv(configEnv.mode, process.cwd())", os.EOL, loadEnv(configEnv.mode, process.cwd()));
  const { VITE_APP_SERVE_PORT } = loadEnv(configEnv.mode, process.cwd());
  return {
    base: "./",
    server: {
      host: true,
      port: VITE_APP_SERVE_PORT,
      proxy: {
        // '/api': {
        //   // target: 'http://10.0.0.60:18080/',
        //   target: 'http://10.0.0.171:30001/',
        //   ws: false,
        //   changeOrigin: true
        // },
        "/api": {
          target: "http://10.0.0.199:8380/api",
          // target: 'http://192.168.0.158:18080/api',
          changeOrigin: true,
          rewrite: (path3) => path3.replace(/^\/api/, "")
        },
        "/voiceStreamWs/": {
          target: `ws://10.0.0.199:9080/`,
          changeOrigin: true,
          ws: true
        },
        "/file": {
          target: "http://10.0.0.199:8380/api",
          // target: 'http://192.168.1.15',
          ws: false,
          changeOrigin: true
        }
      }
    },
    plugins: setupVitePlugins(configEnv),
    resolve: {
      alias: {
        "@": path2.resolve(__vite_injected_original_dirname, "src")
      }
    },
    optimizeDeps: {
      // https://github.com/pure-admin/vue-pure-admin/blob/main/build/optimize.ts
      /**
       * 此文件作用于 `vite.config.ts` 的 `optimizeDeps.include` 依赖预构建配置项
       * 依赖预构建，`vite` 启动时会将下面 include 里的模块，编译成 esm 格式并缓存到 node_modules/.vite 文件夹，页面加载到对应模块时如果浏览器有缓存就读取浏览器缓存，如果没有会读取本地缓存并按需加载
       * 尤其当您禁用浏览器缓存时（这种情况只应该发生在调试阶段）必须将对应模块加入到 include里，否则会遇到开发环境切换页面卡顿的问题（vite 会认为它是一个新的依赖包会重新加载并强制刷新页面），因为它既无法使用浏览器缓存，又没有在本地 node_modules/.vite 里缓存
       * 温馨提示：如果您使用的第三方库是全局引入，也就是引入到 src/main.ts 文件里，就不需要再添加到 include 里了，因为 vite 会自动将它们缓存到 node_modules/.vite
       */
      include: ["pinia", "axios", "vue-router"],
      /**
       * 在预构建中强制排除的依赖项
       * 温馨提示：所有以 `@iconify-icons/` 开头引入的的本地图标模块，都应该加入到下面的 `exclude` 里，因为平台推荐的使用方式是哪里需要哪里引入而且都是单个的引入，不需要预构建，直接让浏览器加载就好
       */
      exclude: ["@iconify-icons/ep"]
    },
    build: {
      target: "es2015",
      rollupOptions: {
        treeshake: false
      }
    }
  };
});
export {
  vite_config_default as default
};
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidml0ZS5jb25maWcuanMiLCAiYnVpbGQvcGx1Z2lucy9pbmRleC5qcyIsICJidWlsZC9wbHVnaW5zL3VucGx1Z2luLmpzIiwgImJ1aWxkL3BsdWdpbnMvc2luZ2xlZmlsZS5qcyIsICJidWlsZC9wbHVnaW5zL2h0bWwuanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxodWJlaS1wcm9qZWN0XFxcXHZpcnR1YWwtdG91ci13ZWJcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXGh1YmVpLXByb2plY3RcXFxcdmlydHVhbC10b3VyLXdlYlxcXFx2aXRlLmNvbmZpZy5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovaHViZWktcHJvamVjdC92aXJ0dWFsLXRvdXItd2ViL3ZpdGUuY29uZmlnLmpzXCI7LypcbiAqIEBBdXRob3I6IGx1b2hhbiB0YW5nbGlAZ3Vva2Vjcy5jb21cbiAqIEBEYXRlOiAyMDI0LTEyLTE5IDEwOjIwOjExXG4gKiBATGFzdEVkaXRvcnM6IGx1b2hhbiB0YW5nbGlAZ3Vva2Vjcy5jb21cbiAqIEBMYXN0RWRpdFRpbWU6IDIwMjQtMTItMTkgMTY6MDY6MDVcbiAqIEBGaWxlUGF0aDogXFx2aXJ0dWFsLXRvdXItd2ViXFx2aXRlLmNvbmZpZy5qc1xuICogQERlc2NyaXB0aW9uOiBcdThGRDlcdTY2MkZcdTlFRDhcdThCQTRcdThCQkVcdTdGNkUsXHU4QkY3XHU4QkJFXHU3RjZFYGN1c3RvbU1hZGVgLCBcdTYyNTNcdTVGMDBrb3JvRmlsZUhlYWRlclx1NjdFNVx1NzcwQlx1OTE0RFx1N0Y2RSBcdThGREJcdTg4NENcdThCQkVcdTdGNkU6IGh0dHBzOi8vZ2l0aHViLmNvbS9PQktvcm8xL2tvcm8xRmlsZUhlYWRlci93aWtpLyVFOSU4NSU4RCVFNyVCRCVBRVxuICovXG5pbXBvcnQgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCBvcyBmcm9tICdvcyc7XG5pbXBvcnQgeyBkZWZpbmVDb25maWcsIGxvYWRFbnYgfSBmcm9tICd2aXRlJztcbmltcG9ydCB7IHNldHVwVml0ZVBsdWdpbnMgfSBmcm9tICcuL2J1aWxkL3BsdWdpbnMvaW5kZXguanMnO1xuXG4vLyBodHRwczovL3ZpdGVqcy5kZXYvY29uZmlnL1xuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKChjb25maWdFbnYpID0+IHtcbiAgY29uc29sZS5sb2coJ2NvbmZpZ0Vudi5tb2RlJywgY29uZmlnRW52Lm1vZGUpO1xuICBjb25zb2xlLmxvZygncHJvY2Vzcy5jd2QoKScsIHByb2Nlc3MuY3dkKCkpO1xuICBjb25zb2xlLmxvZygnbG9hZEVudihjb25maWdFbnYubW9kZSwgcHJvY2Vzcy5jd2QoKSknLCBvcy5FT0wsIGxvYWRFbnYoY29uZmlnRW52Lm1vZGUsIHByb2Nlc3MuY3dkKCkpKTtcbiAgY29uc3QgeyBWSVRFX0FQUF9TRVJWRV9QT1JUIH0gPSBsb2FkRW52KGNvbmZpZ0Vudi5tb2RlLCBwcm9jZXNzLmN3ZCgpKTtcbiAgcmV0dXJuIHtcbiAgICBiYXNlOiAnLi8nLFxuICAgIHNlcnZlcjoge1xuICAgICAgaG9zdDogdHJ1ZSxcbiAgICAgIHBvcnQ6IFZJVEVfQVBQX1NFUlZFX1BPUlQsXG4gICAgICBwcm94eToge1xuICAgICAgICAvLyAnL2FwaSc6IHtcbiAgICAgICAgLy8gICAvLyB0YXJnZXQ6ICdodHRwOi8vMTAuMC4wLjYwOjE4MDgwLycsXG4gICAgICAgIC8vICAgdGFyZ2V0OiAnaHR0cDovLzEwLjAuMC4xNzE6MzAwMDEvJyxcbiAgICAgICAgLy8gICB3czogZmFsc2UsXG4gICAgICAgIC8vICAgY2hhbmdlT3JpZ2luOiB0cnVlXG4gICAgICAgIC8vIH0sXG4gICAgICAgICcvYXBpJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly8xMC4wLjAuMTk5OjgzODAvYXBpJyxcbiAgICAgICAgICAvLyB0YXJnZXQ6ICdodHRwOi8vMTkyLjE2OC4wLjE1ODoxODA4MC9hcGknLFxuICAgICAgICAgIGNoYW5nZU9yaWdpbjogdHJ1ZSxcbiAgICAgICAgICByZXdyaXRlOiAocGF0aCkgPT4gcGF0aC5yZXBsYWNlKC9eXFwvYXBpLywgJycpXG4gICAgICAgIH0sXG4gICAgICAgICcvdm9pY2VTdHJlYW1Xcy8nOiB7XG4gICAgICAgICAgdGFyZ2V0OiBgd3M6Ly8xMC4wLjAuMTk5OjkwODAvYCxcbiAgICAgICAgICBjaGFuZ2VPcmlnaW46IHRydWUsXG4gICAgICAgICAgd3M6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgJy9maWxlJzoge1xuICAgICAgICAgIHRhcmdldDogJ2h0dHA6Ly8xMC4wLjAuMTk5OjgzODAvYXBpJyxcbiAgICAgICAgICAvLyB0YXJnZXQ6ICdodHRwOi8vMTkyLjE2OC4xLjE1JyxcbiAgICAgICAgICB3czogZmFsc2UsXG4gICAgICAgICAgY2hhbmdlT3JpZ2luOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICAgIHBsdWdpbnM6IHNldHVwVml0ZVBsdWdpbnMoY29uZmlnRW52KSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczoge1xuICAgICAgICAnQCc6IHBhdGgucmVzb2x2ZShfX2Rpcm5hbWUsICdzcmMnKVxuICAgICAgfVxuICAgIH0sXG4gICAgb3B0aW1pemVEZXBzOiB7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vcHVyZS1hZG1pbi92dWUtcHVyZS1hZG1pbi9ibG9iL21haW4vYnVpbGQvb3B0aW1pemUudHNcbiAgICAgIC8qKlxuICAgICAgICogXHU2QjY0XHU2NTg3XHU0RUY2XHU0RjVDXHU3NTI4XHU0RThFIGB2aXRlLmNvbmZpZy50c2AgXHU3Njg0IGBvcHRpbWl6ZURlcHMuaW5jbHVkZWAgXHU0RjlEXHU4RDU2XHU5ODg0XHU2Nzg0XHU1RUZBXHU5MTREXHU3RjZFXHU5ODc5XG4gICAgICAgKiBcdTRGOURcdThENTZcdTk4ODRcdTY3ODRcdTVFRkFcdUZGMENgdml0ZWAgXHU1NDJGXHU1MkE4XHU2NUY2XHU0RjFBXHU1QzA2XHU0RTBCXHU5NzYyIGluY2x1ZGUgXHU5MUNDXHU3Njg0XHU2QTIxXHU1NzU3XHVGRjBDXHU3RjE2XHU4QkQxXHU2MjEwIGVzbSBcdTY4M0NcdTVGMEZcdTVFNzZcdTdGMTNcdTVCNThcdTUyMzAgbm9kZV9tb2R1bGVzLy52aXRlIFx1NjU4N1x1NEVGNlx1NTkzOVx1RkYwQ1x1OTg3NVx1OTc2Mlx1NTJBMFx1OEY3RFx1NTIzMFx1NUJGOVx1NUU5NFx1NkEyMVx1NTc1N1x1NjVGNlx1NTk4Mlx1Njc5Q1x1NkQ0Rlx1ODlDOFx1NTY2OFx1NjcwOVx1N0YxM1x1NUI1OFx1NUMzMVx1OEJGQlx1NTNENlx1NkQ0Rlx1ODlDOFx1NTY2OFx1N0YxM1x1NUI1OFx1RkYwQ1x1NTk4Mlx1Njc5Q1x1NkNBMVx1NjcwOVx1NEYxQVx1OEJGQlx1NTNENlx1NjcyQ1x1NTczMFx1N0YxM1x1NUI1OFx1NUU3Nlx1NjMwOVx1OTcwMFx1NTJBMFx1OEY3RFxuICAgICAgICogXHU1QzI0XHU1MTc2XHU1RjUzXHU2MEE4XHU3OTgxXHU3NTI4XHU2RDRGXHU4OUM4XHU1NjY4XHU3RjEzXHU1QjU4XHU2NUY2XHVGRjA4XHU4RkQ5XHU3OUNEXHU2MEM1XHU1MUI1XHU1M0VBXHU1RTk0XHU4QkU1XHU1M0QxXHU3NTFGXHU1NzI4XHU4QzAzXHU4QkQ1XHU5NjM2XHU2QkI1XHVGRjA5XHU1RkM1XHU5ODdCXHU1QzA2XHU1QkY5XHU1RTk0XHU2QTIxXHU1NzU3XHU1MkEwXHU1MTY1XHU1MjMwIGluY2x1ZGVcdTkxQ0NcdUZGMENcdTU0MjZcdTUyMTlcdTRGMUFcdTkwNDdcdTUyMzBcdTVGMDBcdTUzRDFcdTczQUZcdTU4ODNcdTUyMDdcdTYzNjJcdTk4NzVcdTk3NjJcdTUzNjFcdTk4N0ZcdTc2ODRcdTk1RUVcdTk4OThcdUZGMDh2aXRlIFx1NEYxQVx1OEJBNFx1NEUzQVx1NUI4M1x1NjYyRlx1NEUwMFx1NEUyQVx1NjVCMFx1NzY4NFx1NEY5RFx1OEQ1Nlx1NTMwNVx1NEYxQVx1OTFDRFx1NjVCMFx1NTJBMFx1OEY3RFx1NUU3Nlx1NUYzQVx1NTIzNlx1NTIzN1x1NjVCMFx1OTg3NVx1OTc2Mlx1RkYwOVx1RkYwQ1x1NTZFMFx1NEUzQVx1NUI4M1x1NjVFMlx1NjVFMFx1NkNENVx1NEY3Rlx1NzUyOFx1NkQ0Rlx1ODlDOFx1NTY2OFx1N0YxM1x1NUI1OFx1RkYwQ1x1NTNDOFx1NkNBMVx1NjcwOVx1NTcyOFx1NjcyQ1x1NTczMCBub2RlX21vZHVsZXMvLnZpdGUgXHU5MUNDXHU3RjEzXHU1QjU4XG4gICAgICAgKiBcdTZFMjlcdTk5QThcdTYzRDBcdTc5M0FcdUZGMUFcdTU5ODJcdTY3OUNcdTYwQThcdTRGN0ZcdTc1MjhcdTc2ODRcdTdCMkNcdTRFMDlcdTY1QjlcdTVFOTNcdTY2MkZcdTUxNjhcdTVDNDBcdTVGMTVcdTUxNjVcdUZGMENcdTRFNUZcdTVDMzFcdTY2MkZcdTVGMTVcdTUxNjVcdTUyMzAgc3JjL21haW4udHMgXHU2NTg3XHU0RUY2XHU5MUNDXHVGRjBDXHU1QzMxXHU0RTBEXHU5NzAwXHU4OTgxXHU1MThEXHU2REZCXHU1MkEwXHU1MjMwIGluY2x1ZGUgXHU5MUNDXHU0RTg2XHVGRjBDXHU1NkUwXHU0RTNBIHZpdGUgXHU0RjFBXHU4MUVBXHU1MkE4XHU1QzA2XHU1QjgzXHU0RUVDXHU3RjEzXHU1QjU4XHU1MjMwIG5vZGVfbW9kdWxlcy8udml0ZVxuICAgICAgICovXG4gICAgICBpbmNsdWRlOiBbJ3BpbmlhJywgJ2F4aW9zJywgJ3Z1ZS1yb3V0ZXInXSxcbiAgICAgIC8qKlxuICAgICAgICogXHU1NzI4XHU5ODg0XHU2Nzg0XHU1RUZBXHU0RTJEXHU1RjNBXHU1MjM2XHU2MzkyXHU5NjY0XHU3Njg0XHU0RjlEXHU4RDU2XHU5ODc5XG4gICAgICAgKiBcdTZFMjlcdTk5QThcdTYzRDBcdTc5M0FcdUZGMUFcdTYyNDBcdTY3MDlcdTRFRTUgYEBpY29uaWZ5LWljb25zL2AgXHU1RjAwXHU1OTM0XHU1RjE1XHU1MTY1XHU3Njg0XHU3Njg0XHU2NzJDXHU1NzMwXHU1NkZFXHU2ODA3XHU2QTIxXHU1NzU3XHVGRjBDXHU5MEZEXHU1RTk0XHU4QkU1XHU1MkEwXHU1MTY1XHU1MjMwXHU0RTBCXHU5NzYyXHU3Njg0IGBleGNsdWRlYCBcdTkxQ0NcdUZGMENcdTU2RTBcdTRFM0FcdTVFNzNcdTUzRjBcdTYzQThcdTgzNTBcdTc2ODRcdTRGN0ZcdTc1MjhcdTY1QjlcdTVGMEZcdTY2MkZcdTU0RUFcdTkxQ0NcdTk3MDBcdTg5ODFcdTU0RUFcdTkxQ0NcdTVGMTVcdTUxNjVcdTgwMENcdTRFMTRcdTkwRkRcdTY2MkZcdTUzNTVcdTRFMkFcdTc2ODRcdTVGMTVcdTUxNjVcdUZGMENcdTRFMERcdTk3MDBcdTg5ODFcdTk4ODRcdTY3ODRcdTVFRkFcdUZGMENcdTc2RjRcdTYzQTVcdThCQTlcdTZENEZcdTg5QzhcdTU2NjhcdTUyQTBcdThGN0RcdTVDMzFcdTU5N0RcbiAgICAgICAqL1xuICAgICAgZXhjbHVkZTogWydAaWNvbmlmeS1pY29ucy9lcCddXG4gICAgfSxcbiAgICBidWlsZDoge1xuICAgICAgdGFyZ2V0OiAnZXMyMDE1JyxcbiAgICAgIHJvbGx1cE9wdGlvbnM6IHtcbiAgICAgICAgdHJlZXNoYWtlOiBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgfTtcbn0pO1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxodWJlaS1wcm9qZWN0XFxcXHZpcnR1YWwtdG91ci13ZWJcXFxcYnVpbGRcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcaHViZWktcHJvamVjdFxcXFx2aXJ0dWFsLXRvdXItd2ViXFxcXGJ1aWxkXFxcXHBsdWdpbnNcXFxcaW5kZXguanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L2h1YmVpLXByb2plY3QvdmlydHVhbC10b3VyLXdlYi9idWlsZC9wbHVnaW5zL2luZGV4LmpzXCI7aW1wb3J0IHZ1ZSBmcm9tICdAdml0ZWpzL3BsdWdpbi12dWUnO1xuaW1wb3J0IHVub2NzcyBmcm9tICd1bm9jc3Mvdml0ZSc7XG5pbXBvcnQgdml0ZUVzbGludCBmcm9tICd2aXRlLXBsdWdpbi1lc2xpbnQnO1xuaW1wb3J0IEluc3BlY3RvciBmcm9tICd2aXRlLXBsdWdpbi12dWUtaW5zcGVjdG9yJztcbmltcG9ydCB7IHZpc3VhbGl6ZXIgfSBmcm9tICdyb2xsdXAtcGx1Z2luLXZpc3VhbGl6ZXInO1xuXG5pbXBvcnQgdnVlSnN4IGZyb20gJ0B2aXRlanMvcGx1Z2luLXZ1ZS1qc3gnO1xuaW1wb3J0IHVucGx1Z2luIGZyb20gJy4vdW5wbHVnaW4uanMnO1xuaW1wb3J0IHsgdml0ZVNpbmdsZUZpbGUgfSBmcm9tICcuL3NpbmdsZWZpbGUuanMnO1xuaW1wb3J0IGNyZWF0ZUh0bWxQbHVnaW4gZnJvbSAnLi9odG1sLmpzJztcblxuZXhwb3J0IGNvbnN0IHNldHVwVml0ZVBsdWdpbnMgPSAodml0ZUVudikgPT4ge1xuICBjb25zb2xlLmxvZyh2aXRlRW52KTtcbiAgY29uc3QgaXNQcm9kID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlY7XG4gIGlmIChpc1Byb2QpIHtcbiAgICBjb25zdCBwbHVnaW5zID0gW3Z1ZSgpLCB2dWVKc3goKSwgdW5vY3NzKCksIC4uLnVucGx1Z2luKCksIGNyZWF0ZUh0bWxQbHVnaW4oKV07XG4gICAgaWYgKHZpdGVFbnYubW9kZSA9PT0gJ3Byb3RvJykge1xuICAgICAgcGx1Z2lucy5wdXNoKHZpdGVTaW5nbGVGaWxlKCkpO1xuICAgIH1cbiAgICByZXR1cm4gcGx1Z2lucztcbiAgfVxuICByZXR1cm4gW1xuICAgIHZ1ZSgpLFxuICAgIHZ1ZUpzeCgpLFxuICAgIHVub2NzcygpLFxuICAgIC8vIFx1NUYwMFx1NTNEMVx1NzNBRlx1NTg4M1x1NzY4NGVzbGludFx1NjhDMFx1NjdFNVx1NjNEMlx1NEVGNlxuICAgIHZpdGVFc2xpbnQoe1xuICAgICAgZmFpbE9uV2FybmluZzogdHJ1ZVxuICAgIH0pLFxuICAgIC4uLnVucGx1Z2luKCksXG4gICAgLy8gXHU2MjUzXHU1MzA1XHU1MjA2XHU2NzkwXHU2M0QyXHU0RUY2XG4gICAgdmlzdWFsaXplcih7XG4gICAgICBvcGVuOiBmYWxzZSxcbiAgICAgIGd6aXBTaXplOiB0cnVlLFxuICAgICAgYnJvdGxpU2l6ZTogdHJ1ZSxcbiAgICAgIGVtaXRGaWxlOiBmYWxzZSxcbiAgICAgIGZpbGVuYW1lOiAndGVzdC5odG1sJyAvL1x1NTIwNlx1Njc5MFx1NTZGRVx1NzUxRlx1NjIxMFx1NzY4NFx1NjU4N1x1NEVGNlx1NTQwRFxuICAgIH0pLFxuICAgIC8qKlxuICAgICAqIFx1NEVDRVx1OTg3NVx1OTc2Mlx1OERGM1x1NTE2NUlERVx1NTE4NVx1NUJGOVx1NUU5NFx1NzY4NFx1N0VDNFx1NEVGNlxuICAgICAqIFx1NEUwRFx1NEYxQVx1OEJDNlx1NTIyQlx1NTIzMFx1N0VDNFx1NEVGNixcdTk2NjRcdTk3NUVcdTY3MDlcdTRFMDBcdTRFMkFcdTY4MzlcdTdFQzRcdTRFRjZcbiAgICAgKiBodHRwczovL2dpdGh1Yi5jb20vd2ViZmFuc3Bsei92aXRlLXBsdWdpbi12dWUtaW5zcGVjdG9yL2lzc3Vlcy80OVxuICAgICAqL1xuICAgIEluc3BlY3Rvcih7XG4gICAgICB0b2dnbGVCdXR0b25WaXNpYmlsaXR5OiAnbmV2ZXInXG4gICAgfSksXG4gICAgY3JlYXRlSHRtbFBsdWdpbigpXG4gIF07XG59O1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxodWJlaS1wcm9qZWN0XFxcXHZpcnR1YWwtdG91ci13ZWJcXFxcYnVpbGRcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcaHViZWktcHJvamVjdFxcXFx2aXJ0dWFsLXRvdXItd2ViXFxcXGJ1aWxkXFxcXHBsdWdpbnNcXFxcdW5wbHVnaW4uanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L2h1YmVpLXByb2plY3QvdmlydHVhbC10b3VyLXdlYi9idWlsZC9wbHVnaW5zL3VucGx1Z2luLmpzXCI7aW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgQXV0b0ltcG9ydCBmcm9tICd1bnBsdWdpbi1hdXRvLWltcG9ydC92aXRlJztcbmltcG9ydCBDb21wb25lbnRzIGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3ZpdGUnO1xuaW1wb3J0IHsgRWxlbWVudFBsdXNSZXNvbHZlciB9IGZyb20gJ3VucGx1Z2luLXZ1ZS1jb21wb25lbnRzL3Jlc29sdmVycyc7XG5pbXBvcnQgSWNvbnNSZXNvbHZlciBmcm9tICd1bnBsdWdpbi1pY29ucy9yZXNvbHZlcic7XG5pbXBvcnQgSWNvbnMgZnJvbSAndW5wbHVnaW4taWNvbnMvdml0ZSc7XG5pbXBvcnQgeyBjcmVhdGVTdmdJY29uc1BsdWdpbiB9IGZyb20gJ3ZpdGUtcGx1Z2luLXN2Zy1pY29ucyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1bnBsdWdpbigpIHtcbiAgcmV0dXJuIFtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYW50ZnUvdW5wbHVnaW4tYXV0by1pbXBvcnRcbiAgICBBdXRvSW1wb3J0KHtcbiAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NXZ1ZVx1NTQ4Q3Z1ZS1yb3V0ZXJcdTRFMkRcdTc2ODRjb21wb3NpdGlvbiBhcGlcbiAgICAgIC8vIFx1NTE3N1x1NEY1M2FwaVx1NTNFRlx1NEVFNVx1NTcyOC5lc2xpbnRyYy1hdXRvLWltcG9ydC5qc29uXHU2N0U1XHU3NzBCXG4gICAgICBpbXBvcnRzOiBbJ3Z1ZScsICd2dWUtcm91dGVyJ10sXG4gICAgICB2dWVUZW1wbGF0ZTogdHJ1ZSxcbiAgICAgIGVzbGludHJjOiB7XG4gICAgICAgIC8vIHRydWUtLVx1NkJDRlx1NkIyMVx1OTBGRFx1NEYxQVx1NzUxRlx1NjIxMGVzbGludHJjLWF1dG8taW1wb3J0XG4gICAgICAgIGVuYWJsZWQ6IHRydWUsXG4gICAgICAgIGZpbGVwYXRoOiAnLi8uZXNsaW50cmMtYXV0by1pbXBvcnQuanNvbicsXG4gICAgICAgIGdsb2JhbHNQcm9wVmFsdWU6IHRydWVcbiAgICAgIH0sXG4gICAgICAvLyBcdTRFMERcdTk3MDBcdTg5ODFcdTc1MUZcdTYyMTAuZC50c1x1NjU4N1x1NEVGNlxuICAgICAgZHRzOiB0cnVlLFxuICAgICAgLy8gXHU4MUVBXHU1QjlBXHU0RTQ5XHU3Njg0XHU4OUUzXHU2NzkwXHU1NjY4XG4gICAgICByZXNvbHZlcnM6IFtcbiAgICAgICAgRWxlbWVudFBsdXNSZXNvbHZlcigpLFxuICAgICAgICBJY29uc1Jlc29sdmVyKHtcbiAgICAgICAgICBwcmVmaXg6ICdJY29uJ1xuICAgICAgICB9KVxuICAgICAgXVxuICAgIH0pLFxuICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9hbnRmdS91bnBsdWdpbi12dWUtY29tcG9uZW50c1xuICAgIC8vIEBjb21wb25lbnRzXHU3NkVFXHU1RjU1XHU0RTBCXHU3Njg0LnZ1ZSwuanNcdTY1ODdcdTRFRjZcdTRGMUFcdTg4QUJcdTgxRUFcdTUyQThcdTVCRkNcdTUxNjVcbiAgICBDb21wb25lbnRzKHtcbiAgICAgIGRlZXA6IGZhbHNlLFxuICAgICAgLy8gXHU0RTBEXHU5NzAwXHU4OTgxXHU3NTFGXHU2MjEwLmQudHNcdTY1ODdcdTRFRjZcbiAgICAgIGR0czogdHJ1ZSxcbiAgICAgIC8vIFx1NkNFOFx1NTE4Q1x1N0VDNFx1NEVGNlx1NzY4NFx1NzZGOFx1NUJGOVx1NzZFRVx1NUY1NVxuICAgICAgZGlyczogWydzcmMvY29tcG9uZW50cy8qJ10sXG4gICAgICAvLyBcdTdFQzRcdTRFRjZcdTc2ODRcdTYyNjlcdTVDNTVcdTU0MERcbiAgICAgIGV4dGVuc2lvbnM6IFsndnVlJywgJ2pzJ10sXG4gICAgICAvLyBcdTUxNDFcdThCQjhcdTU0MEVcdTk3NjJcdTVCRkNcdTUxNjVcdTc2ODRcdTU0MENcdTU0MERcdTdFQzRcdTRFRjZcdTg5ODZcdTc2RDZcdTUyNERcdTk3NjJcdTc2ODRcbiAgICAgIC8vIFx1NzZFRVx1NTI0RFx1NTNFQVx1NjcwOWRlbW8udnVlXHU1NDBDXHU1NDBEXHU0RTg2KFx1OEZEOVx1NEUyQVx1NTNFQVx1NzUyOFx1NEY1Q1x1OTg4NFx1ODlDOCxcdTRFMERcdTc1MjhcdTUwNUFcdTVCOUVcdTk2NDVcdTRFMUFcdTUyQTEpXG4gICAgICBhbGxvd092ZXJyaWRlczogdHJ1ZSxcbiAgICAgIHJlc29sdmVyczogW1xuICAgICAgICBFbGVtZW50UGx1c1Jlc29sdmVyKCksXG4gICAgICAgIC8vIFx1ODFFQVx1NTJBOFx1NUJGQ1x1NTE2NVx1NUZDNVx1OTg3Qlx1OTA3NVx1NUZBQVx1NTQwRFx1NzlGMFx1NjgzQ1x1NUYwRiB7cHJlZml4XHVGRjFBXHU5RUQ4XHU4QkE0XHU0RTNBaX0te2NvbGxlY3Rpb25cdUZGMUFcdTU2RkVcdTY4MDdcdTk2QzZcdTU0MDhcdTc2ODRcdTU0MERcdTc5RjAsZWxlbWVudCBwbHVzIFx1NEUzQWVwfS17aWNvblx1RkYxQVx1NTZGRVx1NjgwN1x1NTQwRFx1NzlGMH1cbiAgICAgICAgSWNvbnNSZXNvbHZlcih7XG4gICAgICAgICAgZW5hYmxlZENvbGxlY3Rpb25zOiBbJ2VwJ11cbiAgICAgICAgfSlcbiAgICAgIF1cbiAgICB9KSxcbiAgICBJY29ucyh7XG4gICAgICBhdXRvSW5zdGFsbDogdHJ1ZVxuICAgIH0pLFxuICAgIC8vIHN2Z1x1OTZFQVx1NzhBN1x1NTZGRVx1NjNEMlx1NEVGNixcdTUxQ0ZcdTVDMTFodHRwXHU4QkY3XHU2QzQyXG4gICAgY3JlYXRlU3ZnSWNvbnNQbHVnaW4oe1xuICAgICAgaWNvbkRpcnM6IFtwYXRoLnJlc29sdmUocHJvY2Vzcy5jd2QoKSwgJ3NyYy9hc3NldHMvc3ZnLWljb25zJyldXG4gICAgfSlcbiAgXTtcbn1cbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiRTpcXFxcaHViZWktcHJvamVjdFxcXFx2aXJ0dWFsLXRvdXItd2ViXFxcXGJ1aWxkXFxcXHBsdWdpbnNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZmlsZW5hbWUgPSBcIkU6XFxcXGh1YmVpLXByb2plY3RcXFxcdmlydHVhbC10b3VyLXdlYlxcXFxidWlsZFxcXFxwbHVnaW5zXFxcXHNpbmdsZWZpbGUuanNcIjtjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfaW1wb3J0X21ldGFfdXJsID0gXCJmaWxlOi8vL0U6L2h1YmVpLXByb2plY3QvdmlydHVhbC10b3VyLXdlYi9idWlsZC9wbHVnaW5zL3NpbmdsZWZpbGUuanNcIjsvLyBpbXBvcnQgbWljcm9tYXRjaCBmcm9tICdtaWNyb21hdGNoJztcbmNvbnN0IGRlZmF1bHRDb25maWcgPSB7IHVzZVJlY29tbWVuZGVkQnVpbGRDb25maWc6IHRydWUsIHJlbW92ZVZpdGVNb2R1bGVMb2FkZXI6IGZhbHNlLCBkZWxldGVJbmxpbmVkRmlsZXM6IHRydWUgfTtcbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlU2NyaXB0KGh0bWwsIHNjcmlwdEZpbGVuYW1lLCBzY3JpcHRDb2RlLCByZW1vdmVWaXRlTW9kdWxlTG9hZGVyID0gZmFsc2UpIHtcbiAgY29uc3QgcmVTY3JpcHQgPSBuZXcgUmVnRXhwKGA8c2NyaXB0KFtePl0qPykgc3JjPVwiWy4vXSoke3NjcmlwdEZpbGVuYW1lfVwiKFtePl0qKT48L3NjcmlwdD5gKTtcbiAgLy8gd2UgY2FuJ3QgdXNlIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZUFsbCBzaW5jZSBpdCBpc24ndCBzdXBwb3J0ZWQgaW4gTm9kZS5KUyAxNFxuICBjb25zdCBwcmVsb2FkTWFya2VyID0gL1wiX19WSVRFX1BSRUxPQURfX1wiL2c7XG4gIGNvbnN0IG5ld0NvZGUgPSBzY3JpcHRDb2RlLnJlcGxhY2UocHJlbG9hZE1hcmtlciwgJ3ZvaWQgMCcpO1xuICBjb25zdCBpbmxpbmVkID0gaHRtbC5yZXBsYWNlKFxuICAgIHJlU2NyaXB0LFxuICAgIChfLCBiZWZvcmVTcmMsIGFmdGVyU3JjKSA9PiBgPHNjcmlwdCR7YmVmb3JlU3JjfSR7YWZ0ZXJTcmN9PiR7bmV3Q29kZX08L3NjcmlwdD5gXG4gICk7XG4gIHJldHVybiByZW1vdmVWaXRlTW9kdWxlTG9hZGVyID8gX3JlbW92ZVZpdGVNb2R1bGVMb2FkZXIoaW5saW5lZCkgOiBpbmxpbmVkO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlcGxhY2VDc3MoaHRtbCwgc2NyaXB0RmlsZW5hbWUsIHNjcmlwdENvZGUpIHtcbiAgY29uc3QgcmVTdHlsZSA9IG5ldyBSZWdFeHAoYDxsaW5rKFtePl0qPykgaHJlZj1cIlsuL10qJHtzY3JpcHRGaWxlbmFtZX1cIihbXj5dKj8pPmApO1xuICBjb25zdCBsZWdhY3lDaGFyU2V0RGVjbGFyYXRpb24gPSAvQGNoYXJzZXQgXCJVVEYtOFwiOy87XG4gIGNvbnN0IGlubGluZWQgPSBodG1sLnJlcGxhY2UoXG4gICAgcmVTdHlsZSxcbiAgICAoXywgYmVmb3JlU3JjLCBhZnRlclNyYykgPT5cbiAgICAgIGA8c3R5bGUke2JlZm9yZVNyY30ke2FmdGVyU3JjfT4ke3NjcmlwdENvZGUucmVwbGFjZShsZWdhY3lDaGFyU2V0RGVjbGFyYXRpb24sICcnKX08L3N0eWxlPmBcbiAgKTtcbiAgcmV0dXJuIGlubGluZWQ7XG59XG5jb25zdCBpc0pzRmlsZSA9IC9cXC5bbWNdP2pzJC87XG5jb25zdCBpc0Nzc0ZpbGUgPSAvXFwuY3NzJC87XG5jb25zdCBpc0h0bWxGaWxlID0gL1xcLmh0bWw/JC87XG5leHBvcnQgZnVuY3Rpb24gdml0ZVNpbmdsZUZpbGUoe1xuICB1c2VSZWNvbW1lbmRlZEJ1aWxkQ29uZmlnID0gdHJ1ZSxcbiAgcmVtb3ZlVml0ZU1vZHVsZUxvYWRlciA9IGZhbHNlLFxuICBpbmxpbmVQYXR0ZXJuID0gW10sXG4gIGRlbGV0ZUlubGluZWRGaWxlcyA9IHRydWVcbn0gPSBkZWZhdWx0Q29uZmlnKSB7XG4gIGZ1bmN0aW9uIHdhcm5Ob3RJbmxpbmVkKGZpbGVuYW1lKSB7XG4gICAgY29uc29sZS5kZWJ1ZyhgTk9URTogYXNzZXQgbm90IGlubGluZWQ6ICR7ZmlsZW5hbWV9YCk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBuYW1lOiAndml0ZTpzaW5nbGVmaWxlJyxcbiAgICBjb25maWc6IHVzZVJlY29tbWVuZGVkQnVpbGRDb25maWcgPyBfdXNlUmVjb21tZW5kZWRCdWlsZENvbmZpZyA6IHVuZGVmaW5lZCxcbiAgICBlbmZvcmNlOiAncG9zdCcsXG4gICAgZ2VuZXJhdGVCdW5kbGU6IChfLCBidW5kbGUpID0+IHtcbiAgICAgIGNvbnNvbGUuZGVidWcoJ1xcbicpO1xuICAgICAgY29uc3QgZmlsZXMgPSB7XG4gICAgICAgIGh0bWw6IFtdLFxuICAgICAgICBjc3M6IFtdLFxuICAgICAgICBqczogW10sXG4gICAgICAgIG90aGVyOiBbXVxuICAgICAgfTtcbiAgICAgIGZvciAoY29uc3QgaSBvZiBPYmplY3Qua2V5cyhidW5kbGUpKSB7XG4gICAgICAgIGlmIChpc0h0bWxGaWxlLnRlc3QoaSkpIHtcbiAgICAgICAgICBmaWxlcy5odG1sLnB1c2goaSk7XG4gICAgICAgIH0gZWxzZSBpZiAoaXNDc3NGaWxlLnRlc3QoaSkpIHtcbiAgICAgICAgICBmaWxlcy5jc3MucHVzaChpKTtcbiAgICAgICAgfSBlbHNlIGlmIChpc0pzRmlsZS50ZXN0KGkpKSB7XG4gICAgICAgICAgZmlsZXMuanMucHVzaChpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBmaWxlcy5vdGhlci5wdXNoKGkpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBjb25zdCBidW5kbGVzVG9EZWxldGUgPSBbXTtcbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBmaWxlcy5odG1sKSB7XG4gICAgICAgIGNvbnN0IGh0bWxDaHVuayA9IGJ1bmRsZVtuYW1lXTtcbiAgICAgICAgbGV0IHJlcGxhY2VkSHRtbCA9IGh0bWxDaHVuay5zb3VyY2U7XG4gICAgICAgIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZmlsZXMuanMpIHtcbiAgICAgICAgICAvLyBpZiAoaW5saW5lUGF0dGVybi5sZW5ndGggJiYgIW1pY3JvbWF0Y2guaXNNYXRjaChmaWxlbmFtZSwgaW5saW5lUGF0dGVybikpIHtcbiAgICAgICAgICAvLyAgIHdhcm5Ob3RJbmxpbmVkKGZpbGVuYW1lKTtcbiAgICAgICAgICAvLyAgIGNvbnRpbnVlO1xuICAgICAgICAgIC8vIH1cbiAgICAgICAgICBjb25zdCBqc0NodW5rID0gYnVuZGxlW2ZpbGVuYW1lXTtcbiAgICAgICAgICBpZiAoanNDaHVuay5jb2RlICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoYElubGluaW5nOiAke2ZpbGVuYW1lfWApO1xuICAgICAgICAgICAgYnVuZGxlc1RvRGVsZXRlLnB1c2goZmlsZW5hbWUpO1xuICAgICAgICAgICAgcmVwbGFjZWRIdG1sID0gcmVwbGFjZVNjcmlwdChyZXBsYWNlZEh0bWwsIGpzQ2h1bmsuZmlsZU5hbWUsIGpzQ2h1bmsuY29kZSwgcmVtb3ZlVml0ZU1vZHVsZUxvYWRlcik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGZvciAoY29uc3QgZmlsZW5hbWUgb2YgZmlsZXMuY3NzKSB7XG4gICAgICAgIC8vICAgaWYgKGlubGluZVBhdHRlcm4ubGVuZ3RoICYmICFtaWNyb21hdGNoLmlzTWF0Y2goZmlsZW5hbWUsIGlubGluZVBhdHRlcm4pKSB7XG4gICAgICAgIC8vICAgICB3YXJuTm90SW5saW5lZChmaWxlbmFtZSk7XG4gICAgICAgIC8vICAgICBjb250aW51ZTtcbiAgICAgICAgLy8gICB9XG4gICAgICAgIC8vICAgY29uc3QgY3NzQ2h1bmsgPSBidW5kbGVbZmlsZW5hbWVdO1xuICAgICAgICAvLyAgIGNvbnNvbGUuZGVidWcoYElubGluaW5nOiAke2ZpbGVuYW1lfWApO1xuICAgICAgICAvLyAgIGJ1bmRsZXNUb0RlbGV0ZS5wdXNoKGZpbGVuYW1lKTtcbiAgICAgICAgLy8gICByZXBsYWNlZEh0bWwgPSByZXBsYWNlQ3NzKHJlcGxhY2VkSHRtbCwgY3NzQ2h1bmsuZmlsZU5hbWUsIGNzc0NodW5rLnNvdXJjZSk7XG4gICAgICAgIC8vIH1cbiAgICAgICAgaHRtbENodW5rLnNvdXJjZSA9IHJlcGxhY2VkSHRtbDtcbiAgICAgIH1cbiAgICAgIGlmIChkZWxldGVJbmxpbmVkRmlsZXMpIHtcbiAgICAgICAgZm9yIChjb25zdCBuYW1lIG9mIGJ1bmRsZXNUb0RlbGV0ZSkge1xuICAgICAgICAgIGRlbGV0ZSBidW5kbGVbbmFtZV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGZvciAoY29uc3QgbmFtZSBvZiBmaWxlcy5vdGhlcikge1xuICAgICAgICB3YXJuTm90SW5saW5lZChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59XG4vLyBPcHRpb25hbGx5IHJlbW92ZSB0aGUgVml0ZSBtb2R1bGUgbG9hZGVyIHNpbmNlIGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZCBiZWNhdXNlIHRoaXMgcGx1Z2luIGhhcyBpbmxpbmVkIGFsbCBjb2RlLlxuLy8gVGhpcyBhc3N1bWVzIHRoYXQgdGhlIE1vZHVsZSBMb2FkZXIgaXMgKDEpIHRoZSBGSVJTVCBmdW5jdGlvbiBkZWNsYXJlZCBpbiB0aGUgbW9kdWxlLCAoMikgYW4gSUlGRSwgKDQpIGlzIHdpdGhpblxuLy8gYSBzY3JpcHQgd2l0aCBubyB1bmV4cGVjdGVkIGF0dHJpYnV0ZSB2YWx1ZXMsIGFuZCAoNSkgdGhhdCB0aGUgY29udGFpbmluZyBzY3JpcHQgaXMgdGhlIGZpcnN0IHNjcmlwdCB0YWcgdGhhdFxuLy8gbWF0Y2hlcyB0aGUgYWJvdmUgY3JpdGVyaWEuIENoYW5nZXMgdG8gdGhlIFNDUklQVCB0YWcgZXNwZWNpYWxseSBjb3VsZCBicmVhayB0aGlzIGFnYWluIGluIHRoZSBmdXR1cmUuIEl0IHNob3VsZFxuLy8gd29yayB3aGV0aGVyIGBtaW5pZnlgIGlzIGVuYWJsZWQgb3Igbm90LlxuLy8gVXBkYXRlIGV4YW1wbGU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vcmljaGFyZHRhbGxlbnQvdml0ZS1wbHVnaW4tc2luZ2xlZmlsZS9pc3N1ZXMvNTcjaXNzdWVjb21tZW50LTEyNjM5NTAyMDlcbmNvbnN0IF9yZW1vdmVWaXRlTW9kdWxlTG9hZGVyID0gKGh0bWwpID0+XG4gIGh0bWwucmVwbGFjZShcbiAgICAvKDxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiIGNyb3Nzb3JpZ2luPlxccyopXFwoZnVuY3Rpb24oPzogcG9seWZpbGwpP1xcKFxcKVxccypcXHtbXFxzXFxTXSo/XFx9XFwpXFwoXFwpOy8sXG4gICAgJzxzY3JpcHQgdHlwZT1cIm1vZHVsZVwiPidcbiAgKTtcbi8vIE1vZGlmaWVzIHRoZSBWaXRlIGJ1aWxkIGNvbmZpZyB0byBtYWtlIHRoaXMgcGx1Z2luIHdvcmsgd2VsbC5cbmNvbnN0IF91c2VSZWNvbW1lbmRlZEJ1aWxkQ29uZmlnID0gKGNvbmZpZykgPT4ge1xuICBpZiAoIWNvbmZpZy5idWlsZCkgY29uZmlnLmJ1aWxkID0ge307XG4gIC8vIEVuc3VyZXMgdGhhdCBldmVuIHZlcnkgbGFyZ2UgYXNzZXRzIGFyZSBpbmxpbmVkIGluIHlvdXIgSmF2YVNjcmlwdC5cbiAgY29uZmlnLmJ1aWxkLmFzc2V0c0lubGluZUxpbWl0ID0gKCkgPT4gdHJ1ZTtcbiAgLy8gQXZvaWQgd2FybmluZ3MgYWJvdXQgbGFyZ2UgY2h1bmtzLlxuICBjb25maWcuYnVpbGQuY2h1bmtTaXplV2FybmluZ0xpbWl0ID0gMTAwMDAwMDAwO1xuICAvLyBFbWl0IGFsbCBDU1MgYXMgYSBzaW5nbGUgZmlsZSwgd2hpY2ggYHZpdGUtcGx1Z2luLXNpbmdsZWZpbGVgIGNhbiB0aGVuIGlubGluZS5cbiAgY29uZmlnLmJ1aWxkLmNzc0NvZGVTcGxpdCA9IGZhbHNlO1xuICAvLyBXZSBuZWVkIHJlbGF0aXZlIHBhdGggdG8gc3VwcG9ydCBhbnkgc3RhdGljIGZpbGVzIGluIHB1YmxpYyBmb2xkZXIsXG4gIC8vIHdoaWNoIGFyZSBjb3BpZWQgdG8gJHtidWlsZC5vdXREaXJ9IGJ5IHZpdGUuXG4gIGNvbmZpZy5iYXNlID0gJy4vJztcbiAgLy8gTWFrZSBnZW5lcmF0ZWQgZmlsZXMgaW4gJHtidWlsZC5vdXREaXJ9J3Mgcm9vdCwgaW5zdGVhZCBvZiBkZWZhdWx0ICR7YnVpbGQub3V0RGlyfS9hc3NldHMuXG4gIC8vIFRoZW4gdGhlIGVtYmVkZGVkIHJlc291cmNlcyBjYW4gYmUgbG9hZGVkIGJ5IHJlbGF0aXZlIHBhdGguXG4gIGNvbmZpZy5idWlsZC5hc3NldHNEaXIgPSAnJztcbiAgaWYgKCFjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucykgY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMgPSB7fTtcbiAgaWYgKCFjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5vdXRwdXQpIGNvbmZpZy5idWlsZC5yb2xsdXBPcHRpb25zLm91dHB1dCA9IHt9O1xuICBjb25zdCB1cGRhdGVPdXRwdXRPcHRpb25zID0gKG91dCkgPT4ge1xuICAgIC8vIEVuc3VyZSB0aGF0IGFzIG1hbnkgcmVzb3VyY2VzIGFzIHBvc3NpYmxlIGFyZSBpbmxpbmVkLlxuICAgIG91dC5pbmxpbmVEeW5hbWljSW1wb3J0cyA9IHRydWU7XG4gICAgb3V0LmFzc2V0RmlsZU5hbWVzID0gJ2Fzc2V0cy9bbmFtZV0tW2hhc2hdW2V4dG5hbWVdJztcbiAgfTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoY29uZmlnLmJ1aWxkLnJvbGx1cE9wdGlvbnMub3V0cHV0KSkge1xuICAgIGZvciAoY29uc3QgbyBvZiBjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5vdXRwdXQpIHVwZGF0ZU91dHB1dE9wdGlvbnMobyk7XG4gIH0gZWxzZSB7XG4gICAgdXBkYXRlT3V0cHV0T3B0aW9ucyhjb25maWcuYnVpbGQucm9sbHVwT3B0aW9ucy5vdXRwdXQpO1xuICB9XG59O1xuIiwgImNvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lID0gXCJFOlxcXFxodWJlaS1wcm9qZWN0XFxcXHZpcnR1YWwtdG91ci13ZWJcXFxcYnVpbGRcXFxccGx1Z2luc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiRTpcXFxcaHViZWktcHJvamVjdFxcXFx2aXJ0dWFsLXRvdXItd2ViXFxcXGJ1aWxkXFxcXHBsdWdpbnNcXFxcaHRtbC5qc1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9pbXBvcnRfbWV0YV91cmwgPSBcImZpbGU6Ly8vRTovaHViZWktcHJvamVjdC92aXJ0dWFsLXRvdXItd2ViL2J1aWxkL3BsdWdpbnMvaHRtbC5qc1wiO2ltcG9ydCB7IGNyZWF0ZUh0bWxQbHVnaW4gfSBmcm9tICd2aXRlLXBsdWdpbi1odG1sJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGNyZWF0ZUh0bWxQbHVnaW4oe1xuICAgIG1pbmlmeTogdHJ1ZVxuICB9KTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7QUFRQSxPQUFPQSxXQUFVO0FBQ2pCLE9BQU8sUUFBUTtBQUNmLFNBQVMsY0FBYyxlQUFlOzs7QUNWdVIsT0FBTyxTQUFTO0FBQzdVLE9BQU8sWUFBWTtBQUNuQixPQUFPLGdCQUFnQjtBQUN2QixPQUFPLGVBQWU7QUFDdEIsU0FBUyxrQkFBa0I7QUFFM0IsT0FBTyxZQUFZOzs7QUNOZ1QsT0FBTyxVQUFVO0FBQ3BWLE9BQU8sZ0JBQWdCO0FBQ3ZCLE9BQU8sZ0JBQWdCO0FBQ3ZCLFNBQVMsMkJBQTJCO0FBQ3BDLE9BQU8sbUJBQW1CO0FBQzFCLE9BQU8sV0FBVztBQUNsQixTQUFTLDRCQUE0QjtBQUN0QixTQUFSLFdBQTRCO0FBQ2pDLFNBQU87QUFBQTtBQUFBLElBRUwsV0FBVztBQUFBO0FBQUE7QUFBQSxNQUdULFNBQVMsQ0FBQyxPQUFPLFlBQVk7QUFBQSxNQUM3QixhQUFhO0FBQUEsTUFDYixVQUFVO0FBQUE7QUFBQSxRQUVS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
